#!/bin/bash

# 全局变量存储进程ID
BACKEND_PID=""
FRONTEND_PID=""

# 清理函数
cleanup() {
    echo "[INFO] 正在停止服务..."
    if [ ! -z "$BACKEND_PID" ]; then
        kill $BACKEND_PID 2>/dev/null
    fi
    if [ ! -z "$FRONTEND_PID" ]; then
        kill $FRONTEND_PID 2>/dev/null
    fi
    echo "[INFO] 服务已停止"
    exit 0
}

# 设置信号处理
trap cleanup SIGINT SIGTERM

# 检查并杀死占用端口的进程
check_and_kill_port() {
    local port=$1
    local process_name=$2
    
    echo "[INFO] 检查端口 $port 是否被占用..."
    
    # 查找占用端口的进程
    local pid=$(lsof -ti:$port 2>/dev/null)
    
    if [ ! -z "$pid" ]; then
        echo "[WARN] 端口 $port 被进程 $pid 占用，正在杀死..."
        kill -9 $pid 2>/dev/null
        sleep 1
        
        # 再次检查是否成功杀死
        local new_pid=$(lsof -ti:$port 2>/dev/null)
        if [ ! -z "$new_pid" ]; then
            echo "[ERROR] 无法杀死占用端口 $port 的进程，请手动处理"
            exit 1
        else
            echo "[INFO] 成功释放端口 $port"
        fi
    else
        echo "[INFO] 端口 $port 未被占用"
    fi
}

# 自动创建并激活虚拟环境
if [ ! -d "venv" ]; then
  echo "[INFO] 未检测到虚拟环境，正在创建..."
  python3 -m venv venv
fi

# 创建并激活虚拟环境
if [ ! -d ".venv" ]; then
  python3 -m venv .venv
fi
source .venv/bin/activate

# 安装后端依赖
pip install -r backend/requirements.txt

# 加载环境变量
source .env

# 检查并杀死占用端口的进程
check_and_kill_port 7871 "后端服务"
check_and_kill_port 8000 "前端服务"

# 启动后端
echo "[INFO] 启动后端服务..."
nohup python backend/app.py > backend.log 2>&1 &
BACKEND_PID=$!
echo "[INFO] 后端已启动，PID: $BACKEND_PID"

# 启动前端静态服务器
echo "[INFO] 启动前端服务..."
cd frontend
nohup python -m http.server 8000 > ../frontend.log 2>&1 &
FRONTEND_PID=$!
cd ..
echo "[INFO] 前端已启动，PID: $FRONTEND_PID"

# 等待服务启动
echo "[INFO] 等待服务启动..."
sleep 3

# 检查服务是否成功启动
check_service() {
    local port=$1
    local service_name=$2
    
    if lsof -ti:$port >/dev/null 2>&1; then
        echo "[INFO] $service_name 在端口 $port 上成功启动"
        return 0
    else
        echo "[ERROR] $service_name 启动失败"
        return 1
    fi
}

# 检查服务状态
if check_service 7871 "后端服务" && check_service 8000 "前端服务"; then
    echo "[INFO] 所有服务启动成功！"
    
    # 自动打开浏览器
    if which open > /dev/null; then
        echo "[INFO] 正在打开浏览器..."
        open http://localhost:8000
    elif which xdg-open > /dev/null; then
        echo "[INFO] 正在打开浏览器..."
        xdg-open http://localhost:8000
    else
        echo "[INFO] 请手动打开浏览器访问: http://localhost:8000"
    fi
    
    echo "[INFO] 按 Ctrl+C 停止服务"
    
    # 等待进程结束
    wait $BACKEND_PID $FRONTEND_PID
else
    echo "[ERROR] 服务启动失败，正在清理..."
    kill $BACKEND_PID $FRONTEND_PID 2>/dev/null
    exit 1
fi
